package intermouse;

import java.awt.Graphics;
import java.awt.Image;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;

import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

/**
 * @author Sőre András
 * @version 1.0
 * @since 2013-05-09
 * 
 * Egy mezőt kirajzolni képes osztály
 */
public class GraphicsCanvas extends JPanel {
	
	/**
	 *  A mező aktuális tartalmát reprezentáló lista
	 */
	private List<FieldTypes> fieldTypesList;
	
	/**
	 * A kirajzolt objektumok típusait a képfájlokra leképező Map
	 */
	private Map<FieldTypes,Image> imageMap;
	/**
	 * mező x koordinátája
	 */
	final int x;
	/**
	 * mező y koordinátája
	 */
	final 	int y;
	
	/**
	 * @param imageMap
	 * @param xcoord
	 * @param ycoord
	 * A kirajzolt objektumok típusait a képfájlokra leképező Mapot, és koordinátákat kérő konstruktor
	 */
	GraphicsCanvas(Map<FieldTypes,Image> imageMap, int xcoord, int ycoord){
		super();
		this.x=xcoord;
		this.y=ycoord;
		addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if(GraphicsManager.getInstance().getDeodorantOn()){
					Level.getInstance().getFields().get(x*60+y).applyAntDeodorant(3);
					GameState.getInstance().setAntDeodorantSpraysLeft(GameState.getInstance().getAntDeodorantSpraysLeft()-1);
					if(GameState.getInstance().getAntDeodorantSpraysLeft()==0)
					GraphicsManager.getInstance().setDeodorantOn(false);
				}
				if(GraphicsManager.getInstance().getKillerOn()){
					Level.getInstance().addPoison(Level.getInstance().getFields().get(x*60+y));
					GameState.getInstance().setAntKillerSpraysLeft(GameState.getInstance().getAntKillerSpraysLeft()-1);
					if(GameState.getInstance().getAntKillerSpraysLeft()==0)
					GraphicsManager.getInstance().setKillerOn(false);
					}
				GraphicsManager.getInstance().updateWidget();
				GraphicsManager.getInstance().requestFocusInWindow();
			}
		});
		setOpaque(false);
		setBorder(null);
		setPreferredSize(new Dimension(40, 46));
		
		fieldTypesList = new ArrayList<FieldTypes>();
			
		this.imageMap=imageMap;

	}
	
	/* (non-Javadoc)
	 * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
	 * a mezőt kirajzoló függvény
	 */
	public void paintComponent(Graphics g){
		super.paintComponent(g);

		g.drawImage(imageMap.get(FieldTypes.Field), 0, 0, null);
		
		
		//szagok eloszor
		for(FieldTypes k : fieldTypesList){
			if(k.equals(FieldTypes.AntSmell) || k.equals(FieldTypes.FoodSmell))
			g.drawImage(imageMap.get(k), 0, 0, null);
		}
		
		//foods
		int foods=0;
		for(FieldTypes k : fieldTypesList)
			if(k.equals(FieldTypes.Food))
			foods++;
		
		if(foods>0){
			g.drawImage(imageMap.get(FieldTypes.Food), 0, 0, null);
			g.drawImage(GraphicsManager.getInstance().getNumberImage(foods), 0, 0, null);
		}
		
		//tobbi
		for(FieldTypes k : fieldTypesList){
			if(!(k.equals(FieldTypes.Food) || k.equals(FieldTypes.AntSmell) || k.equals(FieldTypes.FoodSmell)))
			g.drawImage(imageMap.get(k), 0, 0, null);
		}
	}
	
	 /**
	 * @param list
	 * a mező aktuális tartalmát reprezentáló lista megadása
	 */
	void setList(List<FieldTypes> list){
		 fieldTypesList = list;
		 repaint();
	 }
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -2953803227125835853L;

}
